package com.example.himalaya.model.api;

import com.example.himalaya.constants.Constants;
import com.ximalaya.ting.android.opensdk.constants.DTransferConstants;
import com.ximalaya.ting.android.opensdk.datatrasfer.CommonRequest;
import com.ximalaya.ting.android.opensdk.datatrasfer.IDataCallBack;
import com.ximalaya.ting.android.opensdk.model.album.GussLikeAlbumList;
import com.ximalaya.ting.android.opensdk.model.album.SearchAlbumList;
import com.ximalaya.ting.android.opensdk.model.announcer.AnnouncerList;
import com.ximalaya.ting.android.opensdk.model.live.radio.RadioList;
import com.ximalaya.ting.android.opensdk.model.track.SearchTrackList;
import com.ximalaya.ting.android.opensdk.model.track.SearchTrackListV2;
import com.ximalaya.ting.android.opensdk.model.word.HotWordList;
import com.ximalaya.ting.android.opensdk.model.word.SuggestWords;

import java.util.HashMap;
import java.util.Map;

/**
 * 3.9 搜索接口
 */
public class SearchApi {

    private SearchApi() {

    }

    private static SearchApi sSearchApi;

    public static SearchApi getSearchApi() {
        if (sSearchApi == null) {
            synchronized (SearchApi.class) {
                if (sSearchApi == null) {
                    sSearchApi = new SearchApi();
                }
            }
        }

        return sSearchApi;
    }

    /**
     * 3.10.6 获取猜你喜欢专辑
     *
     * @param callBack 请求结束后的回调
     */
    public void getRecommendList(IDataCallBack<GussLikeAlbumList> callBack, Map parames) {

        CommonRequest.getGuessLikeAlbum(parames, callBack);
    }




    /**
     * 3.9.1 搜索专辑
     *
     * @param keyword  关键字
     * @param page     当前页
     * @param count    请求数量
     * @param callBack 回调函数
     */
    public void getSearchedAlbums(String keyword, int page, int count, IDataCallBack<SearchAlbumList> callBack) {
        Map<String, String> map = new HashMap<>();
        map.put(DTransferConstants.SEARCH_KEY, keyword);
        map.put(DTransferConstants.SORT, "asc");
        map.put(DTransferConstants.PAGE, page + "");
        map.put(DTransferConstants.PAGE_SIZE, count + "");

        CommonRequest.getSearchedAlbums(map, callBack);
    }

    /**
     * 3.9.2 搜索声音
     *
     * @param keyWord  关键字
     * @param page     当前页
     * @param count    请求数量
     * @param callback 回调函数
     */
    public void getSearchedTracks(String keyWord, int page, int count, final IDataCallBack<SearchTrackList> callback) {
        Map<String, String> map = new HashMap<>();
        map.put(DTransferConstants.SEARCH_KEY, keyWord);
        // map.put(DTransferConstants.CATEGORY_ID, mCategoryId); // 分类默认为0. 检索全库
        map.put(DTransferConstants.PAGE, page + "");
        map.put(DTransferConstants.PAGE_SIZE, count + "");
        CommonRequest.getSearchedTracks(map, callback);
    }

    /**
     * 3.9.3 搜索直播
     *
     * @param keyWord  关键字
     * @param page     当前页
     * @param count    请求数量
     * @param callback 回调函数
     */
    public  void getSearchedRadios(String keyWord, int page, int count, final IDataCallBack<RadioList> callback) {
        Map<String, String> map = new HashMap<>();
        map.put(DTransferConstants.SEARCH_KEY, keyWord);
//        map.put(DTransferConstants.RADIO_CATEGORY_ID, “xx”); // 直播分类ID
        map.put(DTransferConstants.PAGE, page + "");
        map.put(DTransferConstants.PAGE_SIZE, count + "");
        CommonRequest.getSearchedRadios(map, callback);
    }


    /**
     * 3.9.6 搜索主播
     *
     * @param keyWord  关键字
     * @param page     当前页
     * @param count    请求数量
     * @param callback 回调函数
     */
    public  void getSearchAnnouncers(String keyWord, int page, int count, String calc_dimension, final IDataCallBack<AnnouncerList> callback) {
        Map<String, String> map = new HashMap<>();
        map.put(DTransferConstants.SEARCH_KEY, keyWord);
        map.put(DTransferConstants.CALC_DIMENSION, calc_dimension);    // 	排序条件：4-最相关（默认），5-粉丝最多，6-声音最多
        map.put(DTransferConstants.PAGE, page + "");
        map.put(DTransferConstants.PAGE_SIZE, count + "");
        CommonRequest.getSearchAnnouncers(map, callback);
    }

    /**
     * 3.9.4 获取最新热搜词
     *
     * @param callBack 获取后的回调
     */
    public void getHotWords(IDataCallBack<HotWordList> callBack) {
        Map<String, String> map = new HashMap<>();

        map.put(DTransferConstants.TOP, String.valueOf(Constants.COUNT_HOT_WORLD));

        CommonRequest.getHotWords(map, callBack);
    }

    /**
     * 3.9.5 获取某个关键词的联想词
     *
     * @param ketWord  关键词
     * @param callBack 回调
     */
    public void getSuggestWord(String ketWord, IDataCallBack<SuggestWords> callBack) {
        Map<String, String> map = new HashMap<>();

        map.put(DTransferConstants.SEARCH_KEY, ketWord);

        CommonRequest.getSuggestWord(map, callBack);
    }

    /**
     * 3.9.8 搜索专辑，
     * 支持的筛选条件包括专辑ID、标题、专辑所属主播ID或昵称、标签、是否付费、价格类型、分类ID或分类名等，并可指定排序字段。
     *
     * @param params   配置对象
     * @param callBack 回调函数
     */
    public void searchAlbumV2(Map<String, String> params, IDataCallBack<SearchAlbumList> callBack) {
        CommonRequest.searchAlbumV2(params, callBack);
    }

    /**
     * 3.9.9 搜索声音，
     * 支持的筛选条件包括声音ID、标题、所属专辑ID、所属专辑标题、所属主播ID或昵称、标签、是否付费、分类ID或分类名等，并可指定排序字段。
     *
     * @param params   配置对象
     * @param callBack 回调函数
     */
    public  void searchTrackV2(Map<String, String> params, IDataCallBack<SearchTrackListV2> callBack) {
        CommonRequest.searchTrackV2(params, callBack);
    }
}
